﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using SIMCObjetoNegocio;
using SIMCPresenter;
using System.Web.Security;
using System.Text;
using System.Globalization;


public partial class BusquedaPortafolios : System.Web.UI.Page, IConsultarPortafoliosView
{
    private ConsultarPortafoliosPresenter m_Presenter;
    public event EventHandler<SearchEventArgs<PortafolioSearchCriteria>> Buscar;
    public event EventHandler<SearchEventArgs<PortafolioSearchCriteria>> BuscarBalance;
    public event EventHandler<SearchEventArgs<Usuario>> InicializarFiltros;
    public event EventHandler<SearchEventArgs<PortafolioSearchCriteria>> Iniciar;
    private Usuario usuario;
    private int CantTotalRegistrosPortafolio;
    private int CantRegistrosEnPagina;
    private CultureInfo myCulture = new CultureInfo("es-VE");

    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        m_Presenter = new ConsultarPortafoliosPresenter(this);
        usuario = ((Usuario)Session["Usuario"]);
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {           
            IniciarControles();
            if (Iniciar != null)
            {
                if (Criterios == null)
                {
                    Criterios = new PortafolioSearchCriteria(((SessionVariable)Session["variable"]).FechaPortafolio) { Start = StartRow };
                }
                Iniciar(null, new SearchEventArgs<PortafolioSearchCriteria>(Criterios));
                Usuario usuarioObject = new Usuario
                {
                    Id = IdUsuario,
                    Rol = new Rol { Id = RolUsuario.Id }
                };
                InicializarFiltros(null, new SearchEventArgs<Usuario>(usuarioObject));
            }
        }
    }

    private void IniciarControles()
    {
        TextBox1.Text = ((SessionVariable)Session["variable"]).FechaPortafolio.ToString("dd/MM/yyyy");
        txtCodigoTitular.Attributes.Add("onkeypress", "digitsNoPoint()");
        txtIdGerente.Attributes.Add("onkeypress", "digitsNoPoint()");
        txtIdPortafolio.Attributes.Add("onkeypress", "digitsNoPoint()");
        txtIdResponsable.Attributes.Add("onkeypress", "digitsNoPoint()");
        txtIdTitular.Attributes.Add("onkeypress", "digitsNoPoint()");
    }

    protected void btnBuscarPortafolios_Click(object sender, EventArgs e)
    {
        ((SessionVariable)Session["variable"]).FechaPortafolio = Convert.ToDateTime(TextBox1.Text,myCulture);
        Criterios = new PortafolioSearchCriteria(Convert.ToDateTime(TextBox1.Text, myCulture))
        {
            ClienteId = (txtCodigoTitular.Text.Trim() != string.Empty) ? Convert.ToInt32(txtCodigoTitular.Text) : 0,
            Fecha = Convert.ToDateTime(TextBox1.Text,myCulture),
            GerenteId = (txtIdGerente.Text.Trim() != string.Empty) ? Convert.ToInt32(txtIdGerente.Text) : 0,
            IdPortafolio = (txtIdPortafolio.Text.Trim() != string.Empty) ? Convert.ToInt32(txtIdPortafolio.Text) : 0,
            NombreCliente = txtNombreTitular.Text.ToUpper(),
            ResponsableId = (txtIdResponsable.Text.Trim() != string.Empty) ? Convert.ToInt32(txtIdResponsable.Text) : 0,
            IdentificacionPersona = txtIdTitular.Text,
            CodigoRol = usuario.Rol.Id,
            NombreUsuarioExterno = txtNombreUsuarioExterno.Text,
            ConsolidarPosiciones = true
        };
        if (ddlTipoPortafolio.SelectedValue != "TODOS")
        {
            Criterios.TipoPortafolio.Add(ddlTipoPortafolio.SelectedValue);
        }
        else
        {
            Criterios.TipoPortafolio = TiposPortafolio;
        }

        Criterios.UserId = usuario.Id;

        Criterios.Start = 0;
        Buscar(null, new SearchEventArgs<PortafolioSearchCriteria>(Criterios));
    }

    
    public PagedResult<Portafolio> ListaPortafolio
    {
        set
        {
            CantRegistrosEnPagina = 20;
            CantTotalRegistrosPortafolio = value.Total;
            gvPortafolios.DataSource = value.Result;
            gvPortafolios.DataBind();
        }
    }

    public PortafolioBalance BalanceHeader
    {
        set
        {
            throw new NotImplementedException();
        }
    }

    public IList<PortafolioBalancePosicion> BalancePosiciones
    {
        set
        {
            throw new NotImplementedException();
        }
    }
    
    private string MensajeDeError
    {
        set { lblError.Text = value; }
    }

    protected void btnOpcionesBusqueda_Click(object sender, EventArgs e)
    {
        if (InicializarFiltros != null)
        {
            if (VisibilidadFiltros != true)
            {
                VisibilidadFiltros = true;                
            }
            else
            {
                VisibilidadFiltros = false;
            }
        }
    }
    
    private string Mensaje
    {
        set { txtMensaje.Text = value; }
    }
    
    public IList<string> TiposPortafolio
    {
        get
        {
            return ((List<string>)ViewState["TiposPortafolios"]);
        }
        set
        {
            ViewState["TiposPortafolios"] = value;

            IList<string> tiposPortafolios = value;
            tiposPortafolios.Insert(0, "TODOS");
            ddlTipoPortafolio.DataSource = tiposPortafolios;
            ddlTipoPortafolio.DataBind();
            tiposPortafolios.RemoveAt(0);
        }
    }

    public int IdUsuario
    {
        get
        {
            return usuario.Id;
        }
        set
        {
            throw new NotImplementedException();
        }
    }

    public string CodigoRol
    {
        get
        {
            return usuario.Rol.Id;
        }
        set
        {
            throw new NotImplementedException();
        }
    }

    public bool VisibilidadBalance
    {
        get
        {
            throw new NotImplementedException();
        }
        set
        {
            throw new NotImplementedException();
        }
    }

    protected void gvPortafolios_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        string comando = e.CommandName;
        int index = Convert.ToInt32(e.CommandArgument);

        int idPortafolio = Convert.ToInt32(gvPortafolios.Rows[index].Cells[0].Text);

        switch (comando)
        {
            case "Detalles":
                {
                    string Url = "wfModificarPortafolio.aspx?idportafolio=" + idPortafolio;
                    Response.Redirect(Url);
                } break;
            case "Balance":
                {
                    PortafolioSearchCriteria criterio = new PortafolioSearchCriteria(Fecha);
                    criterio.IdPortafolio = idPortafolio;
                    BuscarBalance(null, new SearchEventArgs<PortafolioSearchCriteria>(criterio));
                } break;
           
        }
        int portafolioId = Convert.ToInt32(gvPortafolios.Rows[index].Cells[0].Text);
    }

    

    public void MostrarMensaje(string p_Mensaje, bool p_Exito)
    {
        if (p_Exito)
        {
            Mensaje = p_Mensaje;
        }
        else
        {
            MensajeDeError = p_Mensaje;
        }
    }

    public DateTime Fecha
    {
        get
        {
            return ((SessionVariable)Session["variable"]).FechaPortafolio;
        }
    }

    public bool EsUsuarioInterno
    {
        get { return (usuario.TipoUsuario == TipoUsuario.Interno); }
    }


    public bool VisibilidadFiltros
    {
        set
        {
            TablaBusqueda.Visible = value;
        }
        get 
        {
            return TablaBusqueda.Visible;
        }
    }


    public bool VisibilidadBusqueda
    {
        set 
        { 
            TablaOpciones.Visible = value;
        }
    }

    private Rol RolUsuario
    {
        get { return usuario.Rol; }

        set { usuario.Rol = value; }
    }

    public int CantidadRegistros
    {
        get
        {
            throw new NotImplementedException();
        }
        set
        {
            CantTotalRegistrosPortafolio = value;                        
        }
    }
    protected void gvPortafolios_RowCreated(object sender, GridViewRowEventArgs e)
    {
        if ((e.Row.RowType == DataControlRowType.Footer)&&(CantRegistrosEnPagina > 0))
        {
            int totalPages = CantTotalRegistrosPortafolio / CantRegistrosEnPagina;

            if (CantTotalRegistrosPortafolio % 10 > 0)
            {
                totalPages += 1;
            }
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < totalPages; i++)
            {
                int pageNo = i + 1;
                string pagina = string.Empty;
                if ((StartRow >= i * CantRegistrosEnPagina) && (StartRow < ((i * CantRegistrosEnPagina) + CantRegistrosEnPagina)))
                {
                    pagina = "<b>" + pageNo.ToString() + "</b>";
                }
                else
                {
                    pagina = pageNo.ToString();
                }
                sb.Append("<a href=\"BusquedaPortafolios.aspx?StartRow=" + CantRegistrosEnPagina * i + "\">" + pagina + "</a>&nbsp;");
            }
            e.Row.Cells[0].ColumnSpan = 5;
            e.Row.Cells[0].HorizontalAlign = HorizontalAlign.Left;
            e.Row.Cells[0].Controls.Add(new Literal { Text = sb.ToString() });
            e.Row.Cells.RemoveAt(4);
            e.Row.Cells.RemoveAt(3);
            e.Row.Cells.RemoveAt(2);
            e.Row.Cells.RemoveAt(1);
        }
    }


    public int StartRow
    {
        get
        {
            if (Request.QueryString["StartRow"] != null)
            {
                return Convert.ToInt32(Request.QueryString["StartRow"].ToString());
            }
            return 0;
        }
    }


    public int TamannoPagina
    {
        set { CantRegistrosEnPagina = value; }
    }


    public PortafolioSearchCriteria Criterios
    {
        get
        {
            PortafolioSearchCriteria criterios = ((SessionVariable)Session["variable"]).CriterioBusquedaPortafolio;
            if (criterios != null)
            { 
                txtCodigoTitular.Text = (criterios.ClienteId == 0)? string.Empty: criterios.ClienteId.ToString();
                TextBox1.Text = ((SessionVariable)Session["variable"]).FechaPortafolio.ToString("dd/MM/yyyy");
                txtIdGerente.Text = (criterios.GerenteId == 0)?string.Empty:criterios.GerenteId.ToString();
                txtIdPortafolio.Text = (criterios.IdPortafolio == 0)?string.Empty:criterios.IdPortafolio.ToString();
                txtNombreTitular.Text = criterios.NombreCliente;
                txtIdResponsable.Text = (criterios.ResponsableId == 0)?string.Empty:criterios.ResponsableId.ToString();
                txtIdTitular.Text = criterios.IdentificacionPersona;
                txtNombreUsuarioExterno.Text = criterios.NombreUsuarioExterno;
                criterios.Start = StartRow;
            }
            
            return criterios;
        }
        set
        {
            ((SessionVariable)Session["variable"]).CriterioBusquedaPortafolio = value;
        }
    }
    protected void gvPortafolios_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        { 
            Portafolio portafolio = ((Portafolio)e.Row.DataItem);
            if (usuario.TipoUsuario == TipoUsuario.Interno)
            {
                e.Row.Cells[1].Text = portafolio.NombreTitular;
            }
            else
            {
                e.Row.Cells[1].Text = portafolio.Alias;
            }



            ((ImageButton)(e.Row.Cells[9].FindControl("ImageButton1"))).Attributes.Add("OnClick", CreateQueryString(Convert.ToInt32(portafolio.Id), Fecha.ToString("dd/MM/yyyy")).ToString());

       }
    }

    private StringBuilder CreateQueryString(int IdPortafolio, string Fecha)
    {
        StringBuilder strScript = new StringBuilder();
        strScript.Append("window.open('../pVisorIntegrado.aspx?PortafolioID=");
        strScript.Append(IdPortafolio + "&Fecha=" + Fecha + "&nombreReporte=Consolidado&FechaInicial=" + new DateTime(1900, 1, 1).ToString("dd/MM/yyyy"));
        strScript.Append("',null,'width=850,height=700,resizable=yes,scrollbars=yes,toolbar=no,location=no,directories=no,status=yes,menubar=no,copyhistory=no');");
        return strScript;
    }

    public string NombreUsuario
    {
        get { return usuario.NombreUsuario; }
    }
}